import express from 'express'
import mysql from 'mysql2'
import Excel from 'exceljs'
import { mysqlConfig } from './utils/tool'

const app = express()
app.use(express.json())

// 使用mysql2连接数据库
const pool = mysql.createPool(mysqlConfig)
const promisePool = pool.promise()

// // 查询数据库
// const query =
//     promisePool.query('SELECT * FROM user')
//         .then(([rows, fields]) => {
//             console.log(rows)
//         })
//         .catch(err => {
//             console.log(err)
//         })



// // 查询
// app.get('/', (req, res) => {
//     res.send(query)
// })

// 新增
//@ts-ignore
app.post('/', (req, res) => {
    // 从请求体中获取用户信息
    const { name, age, idcard, companyName, companyAddress, address, phone } = req.body;
    // 判断参数是否完整
    if (!name || !age || !idcard || !companyName || !companyAddress || !address || !phone) {
        res.status(400).send({
            code: 400,
            msg: '参数不完整'
        })
        return
    }
    // 插入数据
    const insert = promisePool.query('INSERT INTO user (name, age, idcard, companyName, companyAddress, address,phone) VALUES (?, ?, ?, ?, ?, ?, ?)', [name, age, idcard, companyName, companyAddress, address, phone])
        .then(([rows, fields]) => {
            console.log(rows)
            res.send({
                code: 200,
                msg: '新增成功'
            })
        })
        .catch(err => {
            console.log(err)
            res.status(500).send({
                code: 500,
                msg: '新增失败'
            })
        })
})


// 导出excel
app.get('/api/users/export', (req, res) => {
    // 创建一个新的Excel工作簿
    const workbook = new Excel.Workbook();
    const worksheet = workbook.addWorksheet('Users');

    // 定义Excel表头
    worksheet.columns = [
        { header: 'Name', key: 'name' },
        { header: 'Age', key: 'age' },
        { header: 'ID Card', key: 'idcard' },
        { header: 'Company Name', key: 'companyName' },
        { header: 'Company Address', key: 'companyAddress' },
        { header: 'Address', key: 'address' },
        { header: 'Phone', key: 'phone' }
    ];

    // 创建一个数据库连接
    pool.getConnection((err, connection) => {
        if (err) {
            // 如果获取连接失败，则返回错误信息
            res.status(500).json({ error: 'Error connecting to the database' });
            return;
        }

        // 定义SQL语句来查询用户数据
        const sql = 'SELECT * FROM user';
        // 使用获取到的连接执行SQL语句
        connection.query(sql, (err, results) => {
            // 释放连接
            connection.release();

            if (err) {
                // 如果执行SQL语句失败，则返回错误信息
                res.status(500).json({ error: 'Error fetching user data from the database' });
                return;
            }

            // 确保results是一个数组
            if (Array.isArray(results)) {
                // 将查询结果添加到Excel工作表中
                results.forEach((user) => {
                    worksheet.addRow(user);
                });

                // 设置响应头，指示内容类型为Excel
                res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
                res.setHeader('Content-Disposition', 'attachment; filename=users.xlsx');

                // 将Excel工作簿写入响应流
                workbook.xlsx.write(res)
                    .then(() => {
                        res.status(200).end();
                    });
            } else {
                res.status(500).json({ error: 'Unexpected result format' });
            }
        });
    });
});

app.listen(3000, () => {
    console.log('Server is running on http://localhost:3000')
})